# import ctypes as C
import ctypes

# # dll = C.cdll.LoadLibrary('brick.dll')
# dll = C.WinDLL('E:/mywork/砖了个砖/bricked-a-brick/brick.dll')
# #1.传入实数调用demo
# result1 = dll.add(2,3)
# print("传入实数调用demo:")
# print(result1)

# #2. 传入指针调用demo1
# result2 = C.c_int(0)#定义int类型变量，初始值为0
# dll.add2(4, 5, C.byref(result2))#byref指明参数传递时为引用传递，对应C中的指针传递
# print("传入指针调用demo1:")
# print(result2.value)#.value可以查看变量的值


# import ctypes  
  
# # 加载DLL库  
# my_dll = ctypes.WinDLL('E:/mywork/砖了个砖/bricked-a-brick/brick.dll', winmode=0)  
  
# # 假设DLL库中有一个名为`my_function`的函数，它接受一个整数参数并返回一个整数  
# # 你需要知道这个函数的参数类型和返回类型，以便正确地使用ctypes进行转换  
  
# # 定义函数的参数类型和返回类型  
# my_function_argtypes = [ctypes.c_int,ctypes.c_int]  # 假设函数接受一个整数参数  
# my_function_restype = ctypes.c_int  # 假设函数返回一个整数  
  
# # 设置函数的参数类型和返回类型  
# my_dll.add.argtypes = my_function_argtypes  
# my_dll.add.restype = my_function_restype  
  
# # 调用函数并获取结果  
# result = my_dll.add(2,3)  # 假设我们传递42作为参数  
  
# print(result)  # 打印函数返回的结果







# 加载DLL  
array_processing_dll = ctypes.WinDLL('E:/mywork/TTT/x64/Debug/brick.dll')  
# 设置DLL函数的参数类型和返回类型  
array_processing_dll.ProcessArray.argtypes = [ctypes.POINTER(ctypes.c_int), ctypes.c_int, ctypes.POINTER(ctypes.c_int)]  
array_processing_dll.ProcessArray.restype = ctypes.POINTER(ctypes.c_int)
array_processing_dll.FreeArray.argtypes = [ctypes.POINTER(ctypes.c_int)]  
array_processing_dll.FreeArray.restype = None  

rows = 3
cols = 5
  
# 创建并初始化一个一维数组  
input_array = (ctypes.c_int * (rows * cols))()  # rows和cols需要根据你的数据来定义  
for i in range(rows * cols):  
    input_array[i] = i  # 初始化输入数组  
  
# 创建输出数组  
output_array = (ctypes.c_int * (rows * cols))()  
  
# 调用DLL函数  
array_processing_dll.Calc(input_array, rows, cols, output_array)  
  
# 访问输出数组  
for i in range(rows * cols):  
    print(output_array[i])  # 输出处理后的数组